การทบทวนพื้นฐานในภาษา C++ ต้องเปลี่ยนจากพฤติกรรมแบบอนุญาตและดั้งเดิมของสไตล์ภาษา C ไปสู่ ความปลอดภัยด้านชนิดข้อมูลอย่างเข้มงวด ซึ่งถูกบังคับโดยเครื่องมือสมัยใหม่ การเปลี่ยนแปลงนี้เน้นการแทนที่พฤติกรรมที่ไม่ชัดเจนด้วยเจตนารมณ์ที่ชัดเจน
1. ความเปราะบางของข้อความคงที่ (String Literal)
ในเครื่องมือสมัยใหม่ char *str = "hello world!"; ถือเป็นช่องโหว่สำคัญ ตั้งแต่มาตรฐาน C++11 เป็นต้นไป ข้อความคงที่จะถูกจัดการเป็น const char[]. การละเลย const ถือเป็นการแปลงที่ถูกยกเลิกแล้ว ซึ่งทำลายความมั่นคงของไบนารี และกระตุ้นให้เกิดการแจ้งเตือนจากคอมไพเลอร์
2. ความล้มเหลวของการแปลงแบบสไตล์ภาษา C
การแปลงแบบทั่วไป (Type)value คือ "เครื่องมือที่หยาบ" ที่ดำเนินงานของทุกประเภทการแปลงแบบภาษา C++ พร้อมกัน โดยไม่เลือกปฏิบัติ ซ่อนข้อผิดพลาดทางตรรกะ ที่อาจถูกใช้ประโยชน์โดยกระบวนการปรับแต่งสมัยใหม่ จนนำไปสู่การล่มของโปรแกรมขณะทำงาน
3. หลักสี่ประการของการแปลงในยุคสมัยใหม่
char *s = "hi";int x = (int)3.5;const char *s = "hi";int x = static_cast<int>(3.5);การทบทวนต้องจัดหมวดหมู่เจตนารมณ์:
static_cast: การแปลงที่ชัดเจน (การลดขนาดตัวเลข หรือการเคลื่อนที่ในโครงสร้างเชิงลำดับ)reinterpret_cast: การตีความรูปแบบบิตระดับต่ำ (การจับคู่ฮาร์ดแวร์/บัฟเฟอร์)const_cast: การลบคุณสมบัติ const/volatile อย่างแม่นยำ เพื่อเชื่อมต่อกับไลบรารีดั้งเดิม
$$\text{ความเข้มงวดสมัยใหม่} = \text{เจตนารมณ์ที่ชัดเจน} + \text{การแจ้งเตือนจากคอมไพเลอร์}$$